package cn.tedu.api;
//1 拿着key做hash运算，计算在桶里的存储位置
//判断，桶里的位置有数据吗？没存过就直接放入Node[]
//如果计算的位置已经存过数据了，再拿着key去判断
//key相同就把原来的value找到并覆盖，key不同才形成链表。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

//测试 Map接口的方法
public class Test4_Map {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<>();
//        map.clear();//清空集合
        map.put(1,"龙一");
        map.put(2,"虎二");
        map.put(3,"张三");
        map.put(4,"李四");
        System.out.println(map);
        map.replace(3,"豹三");
        map.replace(4,"李四","狼四");

        System.out.println(map.get(1));
        System.out.println( map.get("李四"));

        System.out.println(map.containsKey(2));
        System.out.println(map.containsValue("象五"));

        System.out.println(map.equals(123));

        System.out.println(map.size());
        System.out.println(map.hashCode());

        System.out.println(map.remove(5));//移除指定数据，并返回该数据，若没有该指定数据，则返回null
        System.out.println(map.remove(2,"二狗子"));//

        Map<Integer,String> map2 = new HashMap<>();
        map2.put(5,"象五");
        map2.put(6,"狗六");
        map2.put(7,"蛇七");
        map.putAll(map2);
        System.out.println(map);
        //TODO 迭代map里的数据
//        方式一
         Set<Integer> set =map.keySet();
         for(Integer i:set){
             String value = map.get(i);
             System.out.println(i+"="+value);
         }
//         方式二
         Set<Map.Entry<Integer,String>> set2 = map.entrySet();//把map里的key和value存到set里，并封装成Entry对象。
         //遍历 set得到一个Entry
        for(Map.Entry<Integer,String> en:set2){
            Integer key = en.getKey();
           String value =  en.getValue();
            System.out.println(key+"="+value);
        }
        //collecion---把map里的value存入collection
        Collection<String> values = map.values();
        for(String in:values){
            System.out.println(in);
        }




    }
}
